package com.android.support.lib.universal.load;

import java.io.File;

import android.util.Log;

import com.android.support.lib.universal.util.Utilnum;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

public class Upload {
	Utilnum utilnum = new Utilnum();

	/**
	 * 文件上传(需要有服务器的支持，不然无法真正上传成功。)，所谓的上传就是将文件作为参数。
	 * 
	 * @param uploadUrl
	 *            上传地址
	 * @param name
	 *            服务器端，对应的文件参数名.如果为null,默认为"file"
	 * @param file
	 *            上传文件
	 */
	public void upFile(String uploadUrl, String name, File file) {
		RequestParams params = new RequestParams();
		// params.addHeader("name", "value");
		// params.addQueryStringParameter("name", "value");

		// 只包含字符串参数时默认使用BodyParamsEntity，
		// 类似于UrlEncodedFormEntity（"application/x-www-form-urlencoded"）。
		// params.addBodyParameter("name", "value");

		// 加入文件参数后默认使用MultipartEntity（"multipart/form-data"），
		// 如需"multipart/related"，xUtils中提供的MultipartEntity支持设置subType为"related"。
		// 使用params.setBodyEntity(httpEntity)可设置更多类型的HttpEntity（如：
		// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity）。
		// 例如发送json参数：params.setBodyEntity(new StringEntity(jsonStr,charset));
		if (name == null) {
			name = "file";
		}
		params.addBodyParameter(name, file);

		HttpUtils http = new HttpUtils();
		http.send(HttpMethod.POST, uploadUrl, params,
				new RequestCallBack<String>() {
					long s = 0;

					@Override
					public void onStart() {
						Log.e("开始上传", "开始上传");
					}

					@Override
					public void onLoading(long total, long current,
							boolean isUploading) {
						// 进度
						String progress = utilnum.getPercent(current, total);
						// 下载速度
						String rate = utilnum.calculateSize(current - s) + "/S";
						Log.e("正在上传", "进度" + progress + "     速度" + rate);
						s = current;
					}

					@Override
					public void onSuccess(ResponseInfo<String> responseInfo) {
						Log.e("上传成功", "上传成功" + responseInfo.result);
					}

					@Override
					public void onFailure(HttpException error, String msg) {
						Log.e("上传失败", "上传失败");
					}
				});
	}
}
